using System;
using System.Collections.Generic;
using System.Text;

using Tao.OpenGl;

namespace tp3
{
    public class Soporte
    {
        private static double separacion = 0.1;
        private static double separacionBarra = 0.4;
        private static double alturaBarra = 0.4;

        public static void Dibujar(Punto puntoSoporte, Punto puntoDireccion)
        {
            //Aca lo que recibo es el punto de la curva donde debe conectar con el soporte, 
            //y el punto anterior al mismo
            if ((puntoSoporte.X==puntoDireccion.X))
            {
                Punto p1 = new Punto(puntoSoporte.X-separacion,puntoSoporte.Y);
                Punto p2 = new Punto(puntoSoporte.X + separacion, puntoSoporte.Y);
                DibujarCilindro(puntoSoporte, p1);
                DibujarCilindro(puntoSoporte, p2);
                return;
            }
            if ((puntoSoporte.Y == puntoDireccion.Y))
            {
                Punto p1 = new Punto(puntoSoporte.X , puntoSoporte.Y-separacion);
                Punto p2 = new Punto(puntoSoporte.X , puntoSoporte.Y+separacion);
                DibujarCilindro(puntoSoporte, p1);
                DibujarCilindro(puntoSoporte, p2);
                return;
            }

            double m = (puntoSoporte.Y - puntoDireccion.Y) / (puntoSoporte.X - puntoDireccion.X);
            m = -1 / m;

            double b = puntoSoporte.Y - m * puntoSoporte.X;

            double y1 = m * (puntoSoporte.X + separacion) + b;

            Punto vector = new Punto(separacion, y1 - puntoSoporte.Y);
            double distancia = Math.Sqrt(Math.Pow(y1-puntoSoporte.Y,2) + Math.Pow(separacion,2));
            vector.X /= distancia;
            vector.Y /= distancia;

            vector.X *= separacion;
            vector.Y *= separacion;

            DibujarCilindro(puntoSoporte, new Punto(puntoSoporte.X - vector.X, puntoSoporte.Y - vector.Y));
            DibujarCilindro(puntoSoporte, new Punto(puntoSoporte.X + vector.X, puntoSoporte.Y + vector.Y));

            vector.X *= separacionBarra;
            vector.Y *= separacionBarra;

            DibujarCilindro(new Punto(puntoSoporte.X - vector.X, puntoSoporte.Y - vector.Y, puntoSoporte.Z * alturaBarra +0.01),
                new Punto(puntoSoporte.X + vector.X, puntoSoporte.Y + vector.Y, puntoSoporte.Z * alturaBarra));
        }

        private static void DibujarCilindro(Punto p1, Punto p2)
        {
            Cilindro.Dibujar(p1, p2, 0.03, 0.03, 4);
        }
    }
}
